package com.bi.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bi.entity.ComponentLibrary;

import java.util.List;
import java.util.Map;

/**
 * 组件库服务接口
 * 
 * @author BI Platform Team
 * @since 1.0.0
 */
public interface ComponentLibraryService extends IService<ComponentLibrary> {

    /**
     * 分页查询组件库
     * 
     * @param current 当前页
     * @param size 页大小
     * @param params 查询参数
     * @return 分页结果
     */
    IPage<ComponentLibrary> getComponentLibraryPage(long current, long size, Map<String, Object> params);

    /**
     * 发布组件到组件库
     * 
     * @param componentLibrary 组件库信息
     * @return 发布结果
     */
    boolean publishComponent(ComponentLibrary componentLibrary);

    /**
     * 从组件库删除组件
     * 
     * @param id 组件库ID
     * @return 删除结果
     */
    boolean removeFromLibrary(Long id);

    /**
     * 更新组件库信息
     * 
     * @param componentLibrary 组件库信息
     * @return 更新结果
     */
    boolean updateComponentLibrary(ComponentLibrary componentLibrary);

    /**
     * 根据分类查询组件
     * 
     * @param categoryId 分类ID
     * @return 组件列表
     */
    List<ComponentLibrary> getComponentsByCategory(Long categoryId);

    /**
     * 根据组件类型查询组件
     * 
     * @param componentType 组件类型
     * @return 组件列表
     */
    List<ComponentLibrary> getComponentsByType(String componentType);

    /**
     * 根据标签查询组件
     * 
     * @param tags 标签列表
     * @return 组件列表
     */
    List<ComponentLibrary> getComponentsByTags(List<String> tags);

    /**
     * 搜索组件
     * 
     * @param keyword 关键词
     * @param componentType 组件类型
     * @param categoryId 分类ID
     * @return 搜索结果
     */
    List<ComponentLibrary> searchComponents(String keyword, String componentType, Long categoryId);

    /**
     * 获取推荐组件
     * 
     * @param limit 限制数量
     * @return 推荐组件列表
     */
    List<ComponentLibrary> getRecommendedComponents(Integer limit);

    /**
     * 获取热门组件
     * 
     * @param limit 限制数量
     * @return 热门组件列表
     */
    List<ComponentLibrary> getPopularComponents(Integer limit);

    /**
     * 获取组件库统计信息
     * 
     * @return 统计信息
     */
    Map<String, Object> getLibraryStatistics();

    /**
     * 使用组件（增加使用次数）
     * 
     * @param componentId 组件ID
     * @return 使用结果
     */
    boolean useComponent(Long componentId);

    /**
     * 评价组件
     * 
     * @param componentId 组件ID
     * @param rating 评分
     * @return 评价结果
     */
    boolean rateComponent(Long componentId, Double rating);

    /**
     * 复制组件到组件库
     * 
     * @param sourceComponentId 源组件ID
     * @param componentType 组件类型
     * @param categoryId 分类ID
     * @return 复制结果
     */
    ComponentLibrary copyToLibrary(Long sourceComponentId, String componentType, Long categoryId);

    /**
     * 从组件库创建组件实例
     * 
     * @param libraryId 组件库ID
     * @param newName 新组件名称
     * @return 创建结果
     */
    Map<String, Object> createFromLibrary(Long libraryId, String newName);

    /**
     * 导出组件库
     * 
     * @param libraryIds 组件库ID列表
     * @return 导出结果
     */
    Map<String, Object> exportLibrary(List<Long> libraryIds);

    /**
     * 导入组件库
     * 
     * @param importData 导入数据
     * @return 导入结果
     */
    Map<String, Object> importLibrary(Map<String, Object> importData);

    /**
     * 同步组件信息
     * 
     * @param libraryId 组件库ID
     * @return 同步结果
     */
    boolean syncComponentInfo(Long libraryId);
}